
#ifndef GSLVECTORWRAPPER_H

#include <gsl/gsl_vector.h>
#include <iostream>

using namespace std;

/// Wraps the gsl_vector struct under a more convenient interface.
class GSLVectorWrapper
{
public:
  /// Constructs a new wrapper for the given gsl_vector.
  GSLVectorWrapper(const gsl_vector *x);

  /// Returns a pointer to the wrapped gsl_vector struct.
  const gsl_vector *operator->() const;

  /// Prints a GSLVectorWrapper object to the standard output stream.
  friend ostream &operator<<(ostream &os, const GSLVectorWrapper &v);
private:
  /// The wrapped gsl_vector.
  const gsl_vector *x_;
};

#define GSLVECTORWRAPPER_H

#endif
